package tema8;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

import tema8.modello.Cerchio;
import tema8.modello.Curva;
import tema8.modello.CurvaParabolica;
import tema8.modello.FioreANPetali;
import tema8.modello.ProxyCurva;

/**
 * Un Test per la procedura di Disegno delle Curve
 * 
 * @author Alessandro Martinelli
 */
public class CurveTest {

	public static void main(String[] args) {
		
		//Definizione di un JFrame
		JFrame frame=new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(600,400);
		
		//Definizione delle Curve di Test
		Curva curva1=new Cerchio(100, 200, 200);
		Curva curva2=new FioreANPetali(100, 200, 200,4);
		Curva curva3=new CurvaParabolica(200, 0, 100, 0, 100, 200);
		Curva curva4=new FioreANPetali(100, 200, 200,6);//Ne vengono 3 perchè si sovrappongono...
		Curva curva5=new FioreANPetali(100, 200, 200,8);

		//Definizione di un proxy per le Curv
		ProxyCurva proxy=new ProxyCurva();
		proxy.setCurva(curva1);
		
		//Inserimento, nel frame, di un Pannello di Disegno delle Curve che si appoggia al Proxy
		frame.getContentPane().add(new CurveTestPanel(proxy));
		
		//Definizione di un Pannello Laterale contenente pulsanti che attivano le curve
		JPanel buttonPanel=new JPanel();
		buttonPanel.setLayout(new GridLayout(5,1));
			buttonPanel.add(generateCurveButton(curva1, proxy, "Cerchio"));
			buttonPanel.add(generateCurveButton(curva2, proxy, "Fiore4"));
			buttonPanel.add(generateCurveButton(curva3, proxy, "Parabola"));
			buttonPanel.add(generateCurveButton(curva4, proxy, "Fiore3"));
			buttonPanel.add(generateCurveButton(curva5, proxy, "Fiore8"));
		frame.getContentPane().add(buttonPanel,BorderLayout.EAST);	
		
		//Apertura del Frame. Il programma resta in funzione fino a che il frame non viene chiuso
		frame.setVisible(true);
	}
	
	/**
	 * Genera un pulsante che quando viene premuto assegna una Curva ad una ProxyCurva
	 * @param curva La curva che deve essere assegnata
	 * @param proxy Il proxy su cui viene assegnata la curva
	 * @param name Il nome del pulsante
	 * @return Un JButton che svolge il ruolo indicato
	 */
	public static JButton generateCurveButton(final Curva curva,final ProxyCurva proxy,String name){
		JButton button=new JButton(name);
		button.addActionListener(new ActionListener() {//Classe anonima
			@Override
			public void actionPerformed(ActionEvent arg0) {
				proxy.setCurva(curva);
			}
		});
		return button;
	}

}
